package cn.edu.njpi.netty.simple;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * @author 朱宗辉
 * @version V1.0
 * @Package cn.edu.njpi.netty.simple
 * @date 2022/5/23 7:19 PM
 */
public class NettyServer {
    public static void main(String[] args) {
        // 创建BossGroup 和 WorkerGroup
        // 说明
        // 1. 创建两个线程组bossGroup和workerGroup
        // 2. bossGroup 只是处理连接请求，真正的和客户端业务处理，会交给workerGroup完成
        // 3. 两个都是无限循环
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        
        // 创建服务器端的启动对象，配置参数
        ServerBootstrap bootstrap = new ServerBootstrap();

        // 使用链式编程来进行设置
        bootstrap.group(bossGroup,workerGroup) // 设置两个线程组
                .channel(NioServerSocketChannel.class) // 使用NioServerSocketChannel作为服务器的通道实现
                .option(ChannelOption.SO_BACKLOG,128) // 设置线程队列等待连接个数
                .childOption(ChannelOption.SO_KEEPALIVE,true) // 设置保持获得连接状态
                .childHandler() // 给我们的workerGroup的 EventLoop对应的管道设置处理器

    }
}
